package tur.br.moradadosol.view.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;

import tur.br.moradadosol.control.ApartamentoControl;
import tur.br.moradadosol.control.HospedagemControl;
import tur.br.moradadosol.control.HospedeControl;
import tur.br.moradadosol.control.UserAutentication;
import tur.br.moradadosol.model.Hospedagem;
import tur.br.moradadosol.model.Hospede;
import tur.br.moradadosol.view.form.HospedagemForm;

/**
 * @author Ramon F. Garcia
 *
 */
public class ReservaAction extends Action {
	
	public ActionForward execute(
		ActionMapping mapping,
		ActionForm form,
		HttpServletRequest request,
		HttpServletResponse response)
		throws Exception {

		HttpSession session = request.getSession();

		if(!UserAutentication.isUserAutenticated(session)) {
			return mapping.findForward("login");
		}
		
		ActionMessages messages = new ActionMessages();
	
		HospedagemForm Form = (HospedagemForm) form;
		
		HospedagemControl hospedagemControl = new HospedagemControl();
		
		HospedeControl hospedeControl = new HospedeControl();
		
		ApartamentoControl apartamentoControl = 
			(ApartamentoControl) session.getAttribute("apartamentoControl");
		if(apartamentoControl == null) {
			apartamentoControl = new ApartamentoControl();
			session.setAttribute("apartamentoControl", apartamentoControl);
		}
		
		int codigoHospede = 0;
		if(request.getParameter("codigoHospede") != null 
			&& !request.getParameter("codigoHospede").equals("")) {
	
			codigoHospede = Integer.parseInt(
				request.getParameter("codigoHospede"));
		}
		int codigoHospedagem = 0;
		if(request.getParameter("codigoHospedagem") != null
			&& !request.getParameter("codigoHospedagem").equals("")) {
			
			codigoHospedagem = Integer.parseInt(
				request.getParameter("codigoHospedagem"));
		}
		
		Form.getHospedagem().setStatus(Hospedagem.STATUS_RESERVA);
		
		try {
			if(Form.getGravar().length() > 0) {
				hospedagemControl.gravar(Form.getHospedagem());
				
				messages.add("reserva.error", new ActionMessage(
						"message.operation.sucess"));
			}
			else if(Form.getLimpar().length() > 0) {
				Form.reset();
				Form.reset(mapping, request);
			}
			else if(Form.getCancelar().length() > 0) {
				hospedagemControl.cancelar(Form.getHospedagem().getCodigo());
				Form.reset();
				Form.reset(mapping, request);
			}
			else if(Form.getProcurar().length() > 0) {
				session.setAttribute("pagina", "reserva");
				
				return mapping.findForward("procurahospede");
			}
			else if(Form.getProcurarReserva().length() > 0) {
				session.setAttribute("pagina", "reserva");
				
				return mapping.findForward("procurareserva");
			}
			else if(Form.getCalcularPreco().length() > 0) {
				float valorTotal = hospedagemControl.getValorTotalByPeriodo(
						Form.getHospedagem());
				
				Form.getHospedagem().setPreco(valorTotal);
			}
			else if(codigoHospede != 0) {
				Hospede hospede = hospedeControl.getHospedeByCodigo(
					codigoHospede);
				
				Form.setHospede(hospede);
			}
			else if(codigoHospedagem != 0) {
				Hospedagem hospedagem = hospedagemControl.getHospedagemByCodigo(
					codigoHospedagem);
				
				Form.setHospedagem(hospedagem);
			}
		}
		catch(Exception e) {
			messages.add("reserva.error", new ActionMessage(e.getMessage()));
		}
		
		if (!messages.isEmpty()) {
			saveErrors(request, messages);
		}
		
		apartamentoControl.loadApartamentos();
		
		return mapping.getInputForward();
	}

}
